package com.itheima.demo05.System;

import java.util.Arrays;

/*
java.long.System类中提供了大量的静态方法，可以获取与系统相关的信息或系统级操作，在System类的API文档中，常用的方法有：
    public static long currentTimeMillis():返回以毫秒为单位的当前时间。
    public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):将数组中指定的数据拷贝到另一个数组中。
 */
public class Demo01System {
    public static void main(String[] args) {
        demo01();
        demo02();
    }
    /*
    public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):将数组中指定的数据拷贝到另一个数组中。
    参数：src = 源数组。
         srcPos = 源数组中的起始位置(起始索引)。
          dest = 目标数组。
          destPos = 目标数据中的起始位置。
          length = 要复制的数组元素的数量。
    练习：
        将src数组中前3个元素，复制到dest数组的前3个位置上
        复制元素前：
        src数组元素{1,2,3,4,5}，dest数组元素{6,7,8,9,10}
        复制元素后：
        src数组元素{1,2,3,4,5}，dest数组元素{1,2,3,9,10}
     */
private static void demo02(){
    //的定义数组
    int[] src={1,2,3,4,5};
    //定义目标数组
    int[] dest={6,7,8,9,10};
    System.out.println("复制前："+ Arrays.toString(dest));
    //使用System类中的arraycopy把数组的前3个元素复制到目标数组的前3个位置上
    System.arraycopy(src,0,dest,0,3);
    System.out.println("复制前："+ Arrays.toString(dest));
}



    /*
        public static long currentTimeMillis():返回以毫秒为单位的当前时间。
        用来程序的效率
        验证for循环打印数字1-999所需要使用的时间(毫秒)
     */
    private static void demo01() {
        //程序执行前获取一次毫秒值
        long s = System.currentTimeMillis();
        //执行for循环
        for (int i = 0; i < 9999; i++) {
            System.out.println(i);
        }
        long e = System.currentTimeMillis();
        System.out.println("程序共耗时：" + (e - s) + "毫秒");//程序共耗时:169毫秒
    }
}
/*
String类
    字符串是常量：它们的值在创建之后就不可以改变。
    字符串的底层是一个被final修饰的数组，不能改变，是一个常量
    private final byte[] value;

StringBuilder类
    字符串缓冲区，可以提高字符串的操作效率(看成一个长度可以变化的字符串)
    底层也是一个数组，但是没有被final修饰，可以改变长度。
    byte[] value=new byte[16];
    StringBuilder在内存中始终是一个数组，占用空间少，效率高
    如果超出了StringBuilder的容量，会自动扩容。
 */